package com.launcher.wkang.view;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.launcher.wkang.R;
import com.launcher.wkang.activity.LauncherActivity1;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

public class Watch extends View {
    private Paint mPaint;
    private Context context;
    private float minuteDegree;
    private float hourDegree;
    private Calendar mCalendar;
    private int mHour;
    private int mMinuts;

    public Watch(Context context) {
        super(context);
        this.context = context;
        init();
    }

    public Watch(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        init();
    }


    public Watch(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
        init();
    }

    private void init() {
        mPaint = new Paint();
        //抗锯齿
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.BLACK);
        //分三种，STROKE之绘制轮廓，不绘制内容；FILL，只绘制内容；FILL_AND_STROKE，内容和轮廓都绘制
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getWidth() / 2, getHeight() / 2);
        //分针
        canvas.save();
        mPaint.setColor(Color.BLACK);
        mPaint.setStyle(Paint.Style.STROKE);//绘制边框
        mPaint.setStrokeWidth(4);//边框宽度  比指针粗点
        Matrix minuteMatrix=new Matrix();
        minuteMatrix.postTranslate(-(int)(BitmapFactory.decodeResource(getResources(),R.mipmap.minute ).getWidth()*0.5),-(int)(BitmapFactory.decodeResource(getResources(),R.mipmap.minute ).getHeight()*0.86));
        minuteMatrix.postRotate(minuteDegree,0,0);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.minute ),minuteMatrix,mPaint);
        canvas.restore();
        //时针
        canvas.save();
        mPaint.setStyle(Paint.Style.STROKE);//绘制边框
        mPaint.setStrokeWidth(10);//边框宽度  比指分针粗点
        Matrix hourMatrix=new Matrix();
        hourMatrix.postTranslate(-(int)(BitmapFactory.decodeResource(getResources(),R.mipmap.hour ).getWidth()*0.5),-(int)(BitmapFactory.decodeResource(getResources(),R.mipmap.hour ).getHeight()*0.85));
        hourMatrix.postRotate(hourDegree,0,0);
//        hourMatrix.setRotate(hourDegree+360);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.hour ),hourMatrix,mPaint);
        canvas.restore();
    }
    //如果直接绘制数字的画，文字也跟着旋转了，数字有的就会倒着，所以执行下面这一系列操作，再去绘制数字就正常了
    public void trans(Canvas canvas, String text, int degree, Paint paint) {
        Rect rect = new Rect();
        paint.getTextBounds(text, 0, text.length(), rect);
        //先将原来的坐标轴旋转30度
        canvas.rotate(degree);
        //将旋转完成的坐标轴平移到上方   它只是在y轴进行的平移，所以x轴为0，y轴也就是圆心的位置减去35，35是自己固定的位置，可适当自己修改；但是为负值，因为在y轴的上方，Android坐标系往下为正数
        canvas.translate(0, -(getWidth() / 3 - 35));
        //这时在将原来旋转的30都转回去，此时的坐标轴与开始的坐标轴都是直立的，只不过现在的位置处于原来坐标轴的    右上方
        canvas.rotate(-degree);
        //开始写文字  1，2，3，。。。。。12   因为文字写
        canvas.drawText(text, -rect.width() / 2, rect.height() / 2, paint);
        //写完文字后开始将坐标轴复原   先是顺时针旋转30都，
        canvas.rotate(degree);
        //再平移到圆心的位置
        canvas.translate(0, getWidth() / 3 - 35);
        //在逆时针平移30都
        canvas.rotate(-degree);
    }
    private Timer timer = new Timer();
    private TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {

            mCalendar=Calendar.getInstance();
            mHour=mCalendar.get(Calendar.HOUR);
            mMinuts=mCalendar.get(Calendar.MINUTE);
            //这三个变量的换算方式，变量名起分针和秒针起反了，也无所谓了
            //第一个360/60=6，也就是一秒钟走六度
            //第二个6/60 分针一秒针走0.1度
            //时针，一秒钟走1/120度
            hourDegree = (float) ((mHour+(mMinuts/60.0))*30);
            minuteDegree = mMinuts*6;
            /**
             * 自定义View 刷新界面有三种
             * 1：Invalidate() 如果只是内容变动，可使用此方法
             * 2：postInvalidate() 涉及到线程切换的
             * 3：requestLayout() view位置变动，需要调用此方法 涉及到RadioGroup
             */
            postInvalidate();//涉及到线程，界面刷新需要使用此方法
        }
    };

    public void start() {
        Log.d("Watch","public void start()");
//        timer.schedule(timerTask, 0, 1000*60);
        timer.schedule(timerTask, 0, 1000*60);
    }



}